package net.csdn.business.common.oauth2.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import net.csdn.business.common.domain.request.oauth.*;
import net.csdn.business.common.domain.vo.oauth.OauthAccessTokenVO;
import net.csdn.business.common.oauth2.model.entity.OauthAccessToken;


import java.util.List;

/**
 * accessToken信息Service接口
 * 
 * @author zhangyl
 * @date 2022-11-08
 */
public interface IOauthAccessTokenService
{

    /**
     * 分页查询accessToken信息
     *
     * @param query accessToken信息详细信息
     * @return accessToken信息
     */
    public IPage<OauthAccessTokenVO> findPageList(OauthAccessTokenQuery query);

    /**
     * 根据id查询accessToken信息详细信息
     * 
     * @param tokenId accessToken信息的tokenId
     * @return accessToken信息
     */
    public OauthAccessTokenVO selectByTokenId(String tokenId);


    /**
     * 根据id查询accessToken信息详细信息
     *
     * @param authentId accessToken信息的tokenId
     * @return accessToken信息
     */
    public OauthAccessTokenVO selectByAuthentId(String authentId);

    /**
     * 查询accessToken信息列表
     * 
     * @param query accessToken信息
     * @return accessToken信息集合
     */
    public List<OauthAccessTokenVO> selectOauthAccessTokenList(OauthAccessTokenQuery query);

    /**
     * 新增accessToken信息
     * 
     * @param oauthAccessToken accessToken信息
     * @return 结果
     */
    public Integer insertOauthAccessToken(NewOauthAccessTokenDTO oauthAccessToken);

    /**
     * 修改accessToken信息
     * 
     * @param oauthAccessToken accessToken信息
     * @return 结果
     */
    public Integer updateOauthAccessToken(UpdateOauthAccessTokenDTO oauthAccessToken);


    /**
     * 删除accessToken信息信息
     * 
     * @param id accessToken信息主键
     * @return 结果
     */
    public OauthAccessToken getAccessTokenById(String id);


    /**
     * 根据clientId查询所有此应用已经授权的token
     *
     * @param clientId 客户端id;
     * @return 结果
     */
    public List<OauthAccessToken> getAccessTokenByClientId(String clientId);

    /**
     * 删除accessToken信息信息
     *
     * @param tokenId accessToken信息主键
     * @return 结果
     */
    public Integer deleteByTokenId(String tokenId);


    /**
     * 删除accessToken信息信息
     *
     * @param refreshTokenId RefreshToken信息主键
     * @return 结果
     */
    public Integer deleteByRefreshTokenId(String refreshTokenId);

    /**
     * 根据clientId和userName查询accessToken信息信息
     *
     * @param clientId clientId
     * @param userName userName
     * @return 结果
     */
    public List<OauthAccessTokenVO> selectByClientIdAndUserName(String clientId, String userName);


    /**
     * 应用授权统计
     *
     * @param query 应用授权统计
     * @return 结果
     */
    public void statClientAuth(StatClientAuthQuery query);


    /**
     * 根据clientId查询已授权用户数量
     *
     * @param clientId oauth应用的clientId
     * @return oauth应用管理
     */
    public Integer findAuthUserNum(String clientId);
}
